package jdbc.dao.emprunt;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import jdbc.DAO;
import jdbc.dao.compte.UtilisateurDAO;
import jdbc.dao.jeu.BoiteDeJeuDAO;
import metier.emprunt.Emprunt;

public class EmpruntDAO extends DAO<Emprunt> {

	@Override
	public Emprunt find(int id) {
		Emprunt emprunt=null ;
		try {
			ResultSet result = DAO.connect
					.createStatement(
							ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_UPDATABLE
							).executeQuery(
									"SELECT * FROM EMPRUNT WHERE IdEmprunt = " + id
									);
			if(result.first()){
				emprunt = new Emprunt(
						id,
						result.getDate("DateEmprunt"),
						result.getDate("DateRetour"),
						new BoiteDeJeuDAO().find(result.getInt("IdBoiteDeJeu")),
						new UtilisateurDAO().find(result.getInt("IdUtilisateur"))
						);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return emprunt;
	}

	public Emprunt findBdj(int idBdj){
		Emprunt emprunt=null;

		try {
			ResultSet result = DAO.connect
					.createStatement(
							ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_UPDATABLE
							).executeQuery(
									"SELECT * FROM EMPRUNT WHERE IdBoiteDeJeu = " + idBdj
									);
			if(result.first()){
				emprunt = new Emprunt(
						result.getInt("IdEmprunt"),
						result.getDate("DateEmprunt"),
						result.getDate("DateRetour"),
						new BoiteDeJeuDAO().find(idBdj),
						new UtilisateurDAO().find(result.getInt("IdUtilisateur"))
						);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return emprunt;


	}
	
	
	public Emprunt findUtilisateur(int idUtilisateur){
		
		Emprunt emprunt=null;

		try {
			ResultSet result = DAO.connect
					.createStatement(
							ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_UPDATABLE
							).executeQuery(
									"SELECT * FROM EMPRUNT WHERE IdUtilisateur = " + idUtilisateur
									);
			if(result.first()){
				emprunt = new Emprunt(
						result.getInt("IdEmprunt"),
						result.getDate("DateEmprunt"),
						result.getDate("DateRetour"),
						new BoiteDeJeuDAO().find(result.getInt("IdBoiteDeJeu")),
						new UtilisateurDAO().find(idUtilisateur)
						);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return emprunt;
		
	}
	
	
	
	
	






	@Override
	public Emprunt create(Emprunt obj) {
		try {
			ResultSet result = DAO .connect
					.createStatement(
							ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_UPDATABLE
							).executeQuery(
									"SELECT emprunt_id_seq.nextval as IdEmprunt from dual"
									);
			if(result.first()){
				java.sql.Date dateEmpruntSql = new java.sql.Date(obj.getDATE_EMPRUNT().getTime());
				java.sql.Date dateRetourSql = new java.sql.Date(obj.getDateRetour().getTime());
				int id = result.getInt("IdEmprunt");
				PreparedStatement prepare = DAO .connect
						.prepareStatement(
								"INSERT INTO Emprunt (IdEmprunt,IdBoiteDeJeu, IdUtilisateur,DateEmprunt,DateRetour) VALUES(?,?,?,TO_DATE(' "+dateEmpruntSql+" ','YYYY-MM-DD'),TO_DATE(' "+dateRetourSql+" ','YYYY-MM-DD'))"
								);
				prepare.setInt(1, id);
				prepare.setInt(2, obj.getBDJ().getID_BOITE_DE_JEU());
				prepare.setInt(3, obj.getUTILISATEUR().getID_UTILISATEUR());
				prepare.executeUpdate();
				obj = this.find(id);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return obj;
	}

	@Override
	public Emprunt update(Emprunt obj) {
		try {
			DAO .connect
			.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE
					).executeUpdate(
							"UPDATE Emprunt SET DateEmprunt = TO_DATE(' "+ new java.sql.Date(obj.getDATE_EMPRUNT().getTime()) +" ','YYYY-MM-DD') + "+
									", DateRetour = TO_DATE(' "+ new java.sql.Date(obj.getDateRetour().getTime()) +" ','YYYY-MM-DD') + "+
									", IdBoiteDeJeu = '"+ obj.getBDJ().getID_BOITE_DE_JEU() + "'"+ 
									", IdUtilisateur = '"+ obj.getUTILISATEUR().getID_UTILISATEUR() + "'"+ 
									" WHERE IdEmprunt = " + obj.getID_EMPRUNT()
							);
			obj = this.find(obj.getID_EMPRUNT());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return obj;
	}

	@Override
	public void delete(Emprunt obj) {
		try {
			DAO .connect
			.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE
					).executeUpdate(
							"DELETE FROM Emprunt WHERE IdEmprunt = " + obj.getID_EMPRUNT()
							);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}


}
